package mystudy
// 字符串基础知识
import (
	"fmt"
	"strconv"
	"strings"
)

func MyPrintln(str string){
	if str == ""{
		str = "myPrintln"
	}
	fmt.Println()
	fmt.Println("--------", str, "--------")
}

func Zfc(){
	// 1.统计字符串的长度
	fmt.Println("1.统计字符串的长度")
	var str string = "新年好Happy"
	// 打印结果是14，因为一个英文字符utf8 占用8个字节，一个汉字占用3个字节
	fmt.Println("字符串：'新年好Happy：长度'", len(str))
	// 2.对字符串进行遍历
	fmt.Println("2.对字符串进行遍历")
	for i, value := range str {
		fmt.Println("Ascii 索引：", i, " 值：", value)
		fmt.Printf("中文索引：%d 值：%c\n", i, value)
	}
	// 2.对字符串的遍历,如果有中文会出现乱码情况,全英文的话可以使用这个方法进行打印
	fmt.Printf("直接遍历打印：")
	for i:=0;i < len(str); i++{
		fmt.Printf("%c", str[i])
	}
	MyPrintln("")
	// 2.使用切片方式遍历,可以直接打印出中文或者英文不乱码
	r := []rune(str)
	
	fmt.Println("切片方式r:", r)
	for i := 0 ; i < len(r); i++{
		fmt.Printf("%c", r[i])
	}
	MyPrintln("")
	// 3.整数转字符串
	var numInt int = 888888
	str2 := strconv.Itoa(numInt)
	fmt.Printf("str2=%v, str2 type=%T\n", str2, str2)
	// 4.字符串转整型 ASCII to Integer 缩写 Atoi,转换失败 err输出提示，numInt默认值0
	numInt, err := strconv.Atoi("89890i")
	fmt.Println(numInt, err)
	// 5.查找子串是否在指定的字符串中, 返回的是bool
	result := strings.Contains("pythonjavacgoscalapython", "go")
	fmt.Println("查找子串是否在指定的字符串中：", result)
	MyPrintln("统计一个字符串有几个指定的字串")
	// 6.统计一个字符串有几个指定的字串
	subStrCount := strings.Count("pythonjavacgoscalapythongo", "go")
	fmt.Println("统计一个字符串有几个指定的字串:", subStrCount)
	// 7.不区分大小写字符串比较
	fmt.Println(strings.EqualFold("java", "JavA")) // true
	// 8.区分大小写字符串比较 
	fmt.Println("java" == "JavA") // false
	// 9.返回字符串第一次出现的索引值,没有的话返回默认值-1
	// strings.Index 是按照字节来统计下标的，所以当出现中文的时候下标和看到的字符串是不一样的
	fmt.Println(strings.Index("pythonjavacgoscalapythongo", "go"))
	fmt.Println(strings.Index("javajava", "ava"))
	fmt.Println(strings.Index(str, "年"))
	fmt.Printf("%c", str[strings.Index(str, "H")])

}

func Gstr(){
	MyPrintln("1.字符串高级操作")
	var str1 string = "javapythongoPythonjava你好python"
	// 1.字符串的替换 参数-1 代表替换几个 -1 表示所有的，如果是1 那就是替换一个
	result1 := strings.Replace(str1, "python", "py", -1)
	fmt.Println(result1)
	fmt.Println(strings.Replace(str1, "python", "py", 1))
	// 2.字符串分割; 返回一个字符串数组
	MyPrintln("2.字符串分割")
	result2 := strings.Split(str1, "py")
	fmt.Println(result2)
	for i, v :=  range result2 {
		fmt.Println(i, v)
	}
	// 4.字符串的字母进行大小写转换
	MyPrintln("4.字符串字母大小写转换")
	fmt.Println(strings.ToLower(str1))
	fmt.Println(strings.ToUpper(str1))
	// 5.左右空格去掉
	MyPrintln("5.字符串字母大小写转换")
	str2 := "   新年好呀！ 祝福您 万事如意   "
	fmt.Println(str2)
	fmt.Println(strings.TrimSpace(str2))
	// 6.去掉左右两边的某个字符
	MyPrintln("6.去掉左右两边的某个字符")
	fmt.Println(strings.Trim("美国中国加油，中国加油美国", "美国"))
	// 7.去掉左边或者右边的某个字符串
	MyPrintln("7.去掉左边或者右边的某个字符串")
	fmt.Println(strings.TrimLeft("美国中国加油，中国加油美国", "美国"))
	fmt.Println(strings.TrimRight("美国中国加油，中国加油美国", "美国"))
	// 8.判断字符串是否以某个字符串开头
	MyPrintln("8.判断字符串是否以某个字符串开头")
	fmt.Println(strings.HasPrefix("https://www.gdzs.com", "http"))
	// 9.判断字符串是否以某个字符串结尾
	MyPrintln("8.判断字符串是否以某个字符串开头")
	fmt.Println(strings.HasSuffix("https://www.gdzs.com", "com"))


}